ãã®å æ¬çãªã¬ã€ãã§JavaScriptã®ã³ãŒãã¬ãã¥ãŒããã¹ã¿ãŒããŸããããã°ããŒãã«ãããžã§ã¯ãã«ãããã³ãŒãå質ãä¿å®æ§ãããŒã ã®ã³ã©ãã¬ãŒã·ã§ã³ãåäžãããããã®ãã¹ããã©ã¯ãã£ã¹ããã¯ããã¯ãããŒã«ãåŠã³ãŸãã
JavaScriptã³ãŒãã¬ãã¥ãŒïŒå質ä¿èšŒã匷åããããã®ãã¹ããã©ã¯ãã£ã¹
仿¥ã®ããŒã¹ã®éããœãããŠã§ã¢éçºç°å¢ãç¹ã«å€æ§ãªã¿ã€ã ãŸãŒã³ãæåã«ãŸãããã°ããŒãã«ããŒã ã«ãããŠã¯ãé«ãã³ãŒãå質ãç¶æããããšãæãéèŠã§ããçŸä»£ã®Webéçºã®åºç€ã§ããJavaScriptã¯ãä¿¡é Œæ§ãä¿å®æ§ãããã©ãŒãã³ã¹ã確ä¿ããããã«å³æ Œãªã³ãŒãã¬ãã¥ãŒã®å®è·µãæ±ããããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãJavaScriptã³ãŒãã¬ãã¥ãŒã®ãã¹ããã©ã¯ãã£ã¹ãæ¢æ±ããããŒã ãã³ãŒãå質ãåäžãããåœéçãªå¢çãè¶ããŠã³ã©ãã¬ãŒã·ã§ã³ãå¹çåã§ããããæ¯æŽããŸãã
JavaScriptã³ãŒãã¬ãã¥ãŒã¯ãªãéèŠãªã®ãïŒ
ã³ãŒãã¬ãã¥ãŒã¯åã«ãã°ãèŠã€ããã ãã§ãªããç¥èå ±æãä¿é²ããã³ãŒãã£ã³ã°èŠçŽã培åºããå šäœçãªã³ãŒãå質ãåäžãããå ±åäœæ¥ããã»ã¹ã§ããç¹ã«JavaScriptéçºã«ãããŠã¯ãããã€ãã®çç±ããéåžžã«éèŠã§ãã
- æ©æã®ãšã©ãŒæ€åºïŒéçºãµã€ã¯ã«ã®æ©ã段éã§ãæ¬çªç°å¢ã«å°éããåã«ãã°ãæœåšçãªåé¡ãç¹å®ããããšã§ãæéãšãªãœãŒã¹ãç¯çŽã§ããŸããèŠéãããããã°ãåå ã§ãéèŠãªeã³ããŒã¹æ©èœãããŒã¯ã®è²©å£²æéäžã«å€±æããã·ããªãªãæ³åããŠã¿ãŠãã ãããã³ãŒãã¬ãã¥ãŒã«ããæ©æçºèŠã¯ããã®ãããªã³ã¹ãã®ãããäºæ ãé²ãããšãã§ããã§ãããã
- ã³ãŒãã®å¯èªæ§ãšä¿å®æ§ã®åäžïŒã³ãŒããçè§£ãããããä¿å®ããããããšãä¿èšŒããããšã§ãæ°ããªãã°ãå°å ¥ãããªã¹ã¯ãæžãããå°æ¥ã®éçºäœæ¥ãç°¡çŽ åããŸããé©åã«æ§é åãããææžåãããã³ãŒãããŒã¹ã¯ãæ°ããããŒã ã¡ã³ããŒïŒããããç°ãªãå°ççãªå Žæããåå ããïŒãææ¡ããè²¢ç®ãããããªããŸãã
- ã³ãŒãã£ã³ã°èŠçŽã®åŸ¹åºïŒã³ãŒãããŒã¹å šäœã§äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãç¶æããããšã§ãå¯èªæ§ãåäžããèªç¥è² è·ã軜æžãããŸããããã¯ãéçºè ãç°ãªãã³ãŒãã£ã³ã°ã®å¥œã¿ãèæ¯ãæã€å¯èœæ§ãããã°ããŒãã«ã«åæ£ããããŒã ã§äœæ¥ããå Žåã«ç¹ã«éèŠã§ããESLintã®äœ¿çšã®ãããªèŠçŽã培åºããããšã§ãåã ã®ã¹ã¿ã€ã«ã«é¢ä¿ãªãäžè²«æ§ã確ä¿ãããŸãã
- ç¥èå ±æãšããŒã ã³ã©ãã¬ãŒã·ã§ã³ïŒã³ãŒãã¬ãã¥ãŒã¯ãããŒã ã¡ã³ããŒéã§ç¥èããã¹ããã©ã¯ãã£ã¹ãå ±æããããã®ãã©ãããã©ãŒã ãæäŸããŸãããžã¥ãã¢éçºè ã¯çµéšè±å¯ãªååããåŠã³ãã·ãã¢éçºè ã¯æ°ããèŠç¹ãåŸãããšãã§ããŸãããã®å ±ååŠç¿ç°å¢ã¯ãç¶ç¶çãªæ¹åã®æåãè²ã¿ãŸããäŸãã°ãã€ã³ãã®ã·ãã¢éçºè ãç±³åœã®ãžã¥ãã¢éçºè ã«æé©åã®ãã¯ããã¯ãå ±æãããããããŸããã
- ã»ãã¥ãªãã£è匱æ§ïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ã§å®è¡ãããJavaScriptã¯ãã»ãã¥ãªãã£æ»æã®é »ç¹ãªæšçã§ããã³ãŒãã¬ãã¥ãŒã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãSQLã€ã³ãžã§ã¯ã·ã§ã³ã®ãããªæœåšçãªè匱æ§ãç¹å®ããããããæªçšãããã®ãé²ãããšãã§ããŸããã°ããŒãã«ã«ã¯ãå°åã«ãã£ãŠããŒã¿ãã©ã€ãã·ãŒèŠå¶ãç°ãªããŸããã³ãŒãã¬ãã¥ãŒã¯ãã³ã³ãã©ã€ã¢ã³ã¹ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
广çãªJavaScriptã³ãŒãã¬ãã¥ãŒã®ããã®ãã¹ããã©ã¯ãã£ã¹
1. æç¢ºãªã³ãŒãã£ã³ã°èŠçŽãšã¬ã€ãã©ã€ã³ã確ç«ãã
ã³ãŒãã¬ãã¥ãŒããã»ã¹ãéå§ããåã«ãæç¢ºã§å æ¬çãªã³ãŒãã£ã³ã°èŠçŽãšã¬ã€ãã©ã€ã³ãå®çŸ©ããããšãäžå¯æ¬ ã§ãããããã®èŠçŽã¯ã以äžã®ãããªåŽé¢ãã«ããŒããå¿ èŠããããŸãïŒ
- åœåèŠåïŒå€æ°ã颿°ãã¯ã©ã¹ããã¡ã€ã«ã®åœåã«é¢ããã«ãŒã«ã確ç«ããŸããäžè²«ããåœåã¯ãã³ãŒããçè§£ãããããä¿å®ããããããŸããäŸãã°ã倿°ã«ã¯camelCaseãã¯ã©ã¹ã«ã¯PascalCaseã䜿çšããŸãã
- ã³ãŒããã©ãŒãããïŒã€ã³ãã³ããã¹ããŒã·ã³ã°ãæ¹è¡ã«é¢ããã«ãŒã«ãå®çŸ©ããŸããPrettierã®ãããªããŒã«ã¯ããããã®ã«ãŒã«ã«åŸã£ãŠã³ãŒããèªåçã«ãã©ãŒãããã§ããŸãã
- ã³ã¡ã³ãïŒãã€ãã©ã®ããã«ã³ãŒãã«ã³ã¡ã³ãã远å ããããæå®ããŸããã³ã¡ã³ãã¯ãã³ãŒãã®ç®çãããžãã¯ãããã³åææ¡ä»¶ãå¶éã説æããå¿ èŠããããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒãšã©ãŒãäŸå€ãã©ã®ããã«åŠçããããå®çŸ©ããŸããtry-catchãããã¯ã䜿çšããŠæœåšçãªãšã©ãŒãåŠçããæçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- ã»ãã¥ãªãã£ïŒeval()ã®äœ¿çšãé¿ããããŠãŒã¶ãŒå ¥åããµãã¿ã€ãºãããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒæ»æããä¿è·ãããªã©ãã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãæŠèª¬ããŸãã
- ããã©ãŒãã³ã¹ïŒäžèŠãªã«ãŒããé¿ãããDOMæäœãæé©åããããã£ãã·ã³ã°æŠç¥ã䜿çšãããªã©ãå¹ççãªã³ãŒããæžãããã®ã¬ã€ãã©ã€ã³ãæäŸããŸãã
ãããã®èŠçŽã¯ææžåãããã¹ãŠã®ããŒã ã¡ã³ããŒã容æã«ã¢ã¯ã»ã¹ã§ããããã«ããå¿ èŠããããŸããã¹ã¿ã€ã«ã¬ã€ããžã§ãã¬ãŒã¿ãŒã䜿çšããŠããããã§ãã·ã§ãã«ãªå€èгã§ä¿å®ããããã¹ã¿ã€ã«ã¬ã€ããäœæããããšãæ€èšããŠãã ãããESLintãPrettierã®ãããªããŒã«ã¯ããããã®èŠçŽãèªåçã«åŒ·å¶ããããã«èšå®ã§ããŸãã
2. éçè§£æãšãªã³ãã£ã³ã°ã«èªåããŒã«ã䜿çšãã
èªåããŒã«ã¯ãã³ãŒãã¬ãã¥ãŒã®å¹çãšå¹æãå€§å¹ ã«åäžãããããšãã§ããŸããESLintãJSHintãJSLintãªã©ã®éçè§£æããŒã«ã¯ãæœåšçãªãšã©ãŒãã³ãŒãã¹ã¿ã€ã«ã®éåãã»ãã¥ãªãã£è匱æ§ãèªåçã«æ€åºã§ããŸãããããã®ããŒã«ã¯ãã³ãŒãã£ã³ã°èŠçŽãšãã¹ããã©ã¯ãã£ã¹ã匷å¶ããããã«èšå®ã§ããã³ãŒãããŒã¹å šäœã®äžè²«æ§ã確ä¿ããŸãã
ãªã³ãã£ã³ã°ããŒã«ã¯ãŸããå®çŸ©ãããã³ãŒãã£ã³ã°èŠçŽã«åŸã£ãŠã³ãŒããèªåçã«ãã©ãŒãããããã¬ãã¥ãŒäžã®æåã§ã®ã³ãŒããã©ãŒãããã®å¿ èŠæ§ãæžãããŸããã°ããŒãã«ããŒã ã«ãšã£ãŠããã®èªååã¯ãç°ãªãå°åã®æ £è¡ããçããå¯èœæ§ã®ããã¹ã¿ã€ã«èšå®ã«é¢ããè°è«ãé¿ããããã«äžå¯æ¬ ã§ãã
ESLintèšå®ã®äŸ (.eslintrc.js):
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: ['react', '@typescript-eslint', 'prettier'],
rules: {
'prettier/prettier': 'error',
'no-unused-vars': 'warn',
'react/prop-types': 'off',
},
};
ãããã®ããŒã«ãããã¬ã³ãããããã¯ãCI/CDãã€ãã©ã€ã³ãªã©ãéããŠéçºã¯ãŒã¯ãããŒã«çµ±åããããšã§ãã³ãŒããã³ããããŸãã¯ãããã€ãããåã«èªåçã«ãã§ãã¯ãããããšãä¿èšŒãããŸãã
3. 宿çãªã³ãŒãã¬ãã¥ãŒã宿œãã
ã³ãŒãã¬ãã¥ãŒã¯ãéçºããã»ã¹ã®äžéšãšããŠå®æçã«å®æœããå¿ èŠããããŸããã¡ã€ã³ã®ã³ãŒãããŒã¹ã«ããŒãžãããåã«ããã¹ãŠã®ã³ãŒããã¬ãã¥ãŒããããšãç®æããŸããããã¢ãžã£ã€ã«éçºã§ã¯ãããã¯ç¹å®ã®æ©èœããã°ä¿®æ£ã«é¢é£ããã³ãŒããã¬ãã¥ãŒããããšãæå³ããŸãã
以äžã®ã¢ãããŒããæ€èšããŠãã ããïŒ
- ãã¢ããã°ã©ãã³ã°ïŒ2人ã®éçºè ãåãã³ãŒãã§å ±åäœæ¥ãã1人ãã³ãŒããæžãããã1人ããªã¢ã«ã¿ã€ã ã§ã¬ãã¥ãŒããŸãã
- ãã«ãªã¯ãšã¹ãã¬ãã¥ãŒïŒéçºè ã¯ã³ãŒãã®å€æŽããã«ãªã¯ãšã¹ããšããŠæåºãããããä»ã®ããŒã ã¡ã³ããŒã«ãã£ãŠã¬ãã¥ãŒãããåŸãã¡ã€ã³ã®ã³ãŒãããŒã¹ã«ããŒãžãããŸããããã¯GitHubãGitLabãBitbucketãªã©ã®ãã©ãããã©ãŒã ã§äžè¬çãªæ £è¡ã§ãã
- 宿çãªã³ãŒãã¬ãã¥ãŒããŒãã£ã³ã°ïŒããŒã ã¯å®æçã«éãŸããäžç·ã«ã³ãŒããã¬ãã¥ãŒããŸããããã¯ãè€éãŸãã¯éèŠãªã³ãŒãã®å€æŽã«ã€ããŠè°è«ããè¯ãæ¹æ³ã§ãã
ã°ããŒãã«ã«åæ£ããããŒã ã®å Žåããã«ãªã¯ãšã¹ãã䜿çšããéåæã®ã³ãŒãã¬ãã¥ãŒãæãå®çšçãªã¢ãããŒãã§ããããšãå€ããç°ãªãã¿ã€ã ãŸãŒã³ã®éçºè ãéœåã®è¯ãæã«ã³ãŒããã¬ãã¥ãŒã§ããŸããGitHubã®ã³ãŒãã¬ãã¥ãŒæ©èœã®ããã«ãã³ãŒããªããžããªã«çŽæ¥çµ±åãããããŒã«ã¯ãããã»ã¹ãå¹çåããŸãã
4. ãã°çºèŠã ãã§ãªãã³ãŒãå質ã«çŠç¹ãåœãŠã
ã³ãŒãã¬ãã¥ãŒã¯ãåã«ãã°ãèŠã€ããããšä»¥äžã«çŠç¹ãåœãŠãã¹ãã§ããå¯èªæ§ãä¿å®æ§ãããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ãªã©ãã³ãŒãã®å šäœçãªå質ãè©äŸ¡ããå¿ èŠããããŸããä»ã®èª°ãïŒæœåšçã«ç°ãªãæåãèšèªã¹ãã«ãæã€äººïŒãå°æ¥ãã®ã³ãŒããçè§£ããä¿®æ£ããããšãã©ãã»ã©ç°¡åããèããŠã¿ãŸãããã
ã³ãŒããã¬ãã¥ãŒããéã«ã¯ã次ã®ãããªè³ªåãããŸãïŒ
- ã³ãŒãã¯çè§£ãããããïŒ
- ã³ãŒãã¯ååã«ææžåãããŠãããïŒ
- ã³ãŒãã¯ç¢ºç«ãããã³ãŒãã£ã³ã°èŠçŽã«åŸã£ãŠãããïŒ
- ã³ãŒãã¯å¹ççã§ããã©ãŒãã³ã¹ãè¯ããïŒ
- ã³ãŒãã¯å®å šãïŒ
- ã³ãŒãã¯ããã·ã³ãã«ãŸãã¯ãšã¬ã¬ã³ããªæ¹æ³ã§æžãããšãã§ãããïŒ
建èšçãªãã£ãŒãããã¯ãšæ¹åã®ããã®ææ¡ãæäŸããŸããåã«æ¹å€ããã®ã§ã¯ãªããäœè ãã³ãŒããæ¹åããã®ãå©ããããšã«çŠç¹ãåœãŠãŸããã³ã¡ã³ãã¯æç€ºã§ã¯ãªãã質åãææ¡ãšããŠè¡šçŸããŸããäŸãã°ãããã®ã³ãŒãã¯éå¹çã§ãããšèšã代ããã«ããå¥ã®ã¢ã«ãŽãªãºã ã䜿çšããŠãã®ã³ãŒããæé©åã§ããŸãããïŒããšè©ŠããŠã¿ãŠãã ããã
5. ã³ãŒãã¬ãã¥ãŒã«ãã§ãã¯ãªã¹ãã䜿çšãã
ãã§ãã¯ãªã¹ãã䜿çšãããšãã³ãŒãã®ãã¹ãŠã®éèŠãªåŽé¢ãã¬ãã¥ãŒãããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãããã§ãã¯ãªã¹ãã¯ã以äžã®ãããªåŽé¢ãã«ããŒããå¿ èŠããããŸãïŒ
- æ©èœæ§ïŒã³ãŒãã¯æå³ããæ©èœãæ£ããå®è¡ãããïŒ
- ãšã©ãŒãã³ããªã³ã°ïŒã³ãŒãã¯ãšã©ãŒãäŸå€ãé©åã«åŠçãããïŒ
- ã»ãã¥ãªãã£ïŒã³ãŒãã«æœåšçãªã»ãã¥ãªãã£è匱æ§ã¯ãªããïŒ
- ããã©ãŒãã³ã¹ïŒã³ãŒãã¯å¹ççã§ããã©ãŒãã³ã¹ãè¯ããïŒ
- å¯èªæ§ïŒã³ãŒãã¯çè§£ãããããïŒ
- ä¿å®æ§ïŒã³ãŒãã¯ä¿å®ãããããïŒ
- ãã¹ãå®¹ææ§ïŒã³ãŒãã¯ãã¹ããããããïŒ
- ã³ãŒãã¹ã¿ã€ã«ïŒã³ãŒãã¯ç¢ºç«ãããã³ãŒãã£ã³ã°èŠçŽã«åŸã£ãŠãããïŒ
- ããã¥ã¡ã³ãïŒã³ãŒãã¯ååã«ææžåãããŠãããïŒ
ãã§ãã¯ãªã¹ãã¯ãç¹å®ã®ãããžã§ã¯ããšæè¡ã¹ã¿ãã¯ã«åãããŠèª¿æŽããå¿ èŠããããŸããäŸãã°ãReactã¢ããªã±ãŒã·ã§ã³ã®ãã§ãã¯ãªã¹ãã«ã¯ãã³ã³ããŒãã³ãã®èšèšãç¶æ 管çã«é¢é£ããç¹å®ã®é ç®ãå«ãŸãããããããŸããã
6. ã³ãŒãã¬ãã¥ãŒãçŠç¹ãçµããç°¡æœã«ä¿ã€
ã³ãŒãã¬ãã¥ãŒã¯çŠç¹ãçµããç°¡æœã§ããã¹ãã§ããäžåºŠã«å€§éã®ã³ãŒããã¬ãã¥ãŒãããšãå§åãããŠèŠèœãšãã«ã€ãªããå¯èœæ§ããããŸããã³ãŒããå°ããã管çãããããã£ã³ã¯ã§ã¬ãã¥ãŒããããšãç®æããŸãããã
åã³ãŒãã¬ãã¥ãŒã®ç¯å²ãç¹å®ã®æ©èœããã°ä¿®æ£ã«éå®ããŸããããã«ãããã³ãŒããçè§£ããæœåšçãªåé¡ãç¹å®ãããããªããŸããã³ãŒãã¬ãã¥ãŒã倧ããããå Žåã¯ãããå°ããªã¬ãã¥ãŒã«åå²ããå¿ èŠããããããããŸããã
æç¢ºã§ç°¡æœãªãã£ãŒãããã¯ãæäŸããŸããææ§ãŸãã¯äžæç¢ºãªã³ã¡ã³ãã¯é¿ããŠãã ãããäœã倿Žããå¿ èŠãããã®ãããªãããããã®ããå ·äœçã«ç€ºããŸãããã€ã³ãã説æããããã«äŸã䜿çšããŸããåœéçãªããŒã ã§ã¯ã誀解ãé¿ããããã«æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãç¹ã«éèŠã§ãã
7. ãªãŒãã³ãªã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã©ãã¬ãŒã·ã§ã³ã奚å±ãã
ã³ãŒãã¬ãã¥ãŒã¯ããªãŒãã³ãªã³ãã¥ãã±ãŒã·ã§ã³ãšç¥èå ±æã奚å±ããå ±åäœæ¥ããã»ã¹ã§ããã¹ãã§ããéçºè ãå®å¿ããŠè³ªåãããããã£ãŒãããã¯ãæäŸãããã§ããæåãäœãåºããŸãã
éçºè ã«ã³ãŒãã®å€æŽãæœåšçãªåé¡ã«ã€ããŠè°è«ããããšã奚å±ããŸããSlackãMicrosoft Teamsãªã©ã®ãªã³ã©ã€ã³ã³ã©ãã¬ãŒã·ã§ã³ããŒã«ã䜿çšããŠãã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããŸããäŒè°ãè°è«ãã¹ã±ãžã¥ãŒã«ããéã¯ãã¿ã€ã ãŸãŒã³ã®éãã«æ³šæããŠãã ããã
ç¶ç¶çãªåŠç¿ã®æåãæšé²ããŸããéçºè ãäºãã«ç¥èããã¹ããã©ã¯ãã£ã¹ãå ±æããããšã奚å±ããŸããããã¯ãã³ãŒãã¬ãã¥ãŒãã¡ã³ã¿ãªã³ã°ããŸãã¯ãã¬ãŒãã³ã°ã»ãã·ã§ã³ãéããŠè¡ãããšãã§ããŸãã
8. æåçãªéãã«æ³šæãã
ã°ããŒãã«ã«åæ£ããããŒã ã§äœæ¥ããå Žåãæåçãªéãã«æ³šæããããšãéèŠã§ããç°ãªãæåã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ãã³ãŒãã¬ãã¥ãŒãžã®ã¢ãããŒããç°ãªãå ŽåããããŸãããããã®éããå°éããæã蟌ã¿ãé¿ããŠãã ããã
äŸãã°ãäžéšã®æåã§ã¯ãã£ãŒãããã¯ãããçŽæ¥çã§ããäžæ¹ãä»ã®æåã§ã¯ãã鿥çã§ããå ŽåããããŸãããããã®ãã¥ã¢ã³ã¹ã«æ°ã¥ããããã«å¿ããŠã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ã調æŽããŠãã ããã誰ããçè§£ã§ããªãå¯èœæ§ã®ããã€ãã£ãªã ãã¹ã©ã³ã°ã®äœ¿çšã¯é¿ããŠãã ããã
ãã¹ãŠã®ã³ãŒãã¬ãã¥ãŒãšã³ãã¥ãã±ãŒã·ã§ã³ã«ãè±èªãªã©ã®å ±éèšèªã䜿çšããããšãæ€èšããŠãã ãããããã«ããã誀解ãé¿ããå šå¡ãåãèªèãæã€ããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
9. ãã¹ããèªååãã
èªåãã¹ãã¯JavaScriptéçºã®éèŠãªéšåã§ãããã³ãŒããæåŸ ã©ããã«æ©èœããããšã確èªãããªã°ã¬ãã·ã§ã³ãé²ããŸããã³ãŒãã¬ãã¥ãŒããã»ã¹ã«èªåãã¹ããçµ±åããŠããšã©ãŒãæ©æã«çºèŠããæ°ãããã°ãå°å ¥ãããªã¹ã¯ãæžãããŸãã
èªåãã¹ãã®çš®é¡ïŒ
- åäœãã¹ãïŒåã ã®ã³ã³ããŒãã³ãã颿°ãåç¬ã§ãã¹ãããŸãã
- çµåãã¹ãïŒç°ãªãã³ã³ããŒãã³ããã¢ãžã¥ãŒã«éã®çžäºäœçšããã¹ãããŸãã
- ãšã³ãããŒãšã³ããã¹ãïŒãŠãŒã¶ãŒã®èŠç¹ããã¢ããªã±ãŒã·ã§ã³å šäœããã¹ãããŸãã
JestãMochaãCypressãªã©ã®ããŒã«ã䜿çšããŠãèªåãã¹ããäœæããå®è¡ããããšãã§ããŸãããããã®ããŒã«ãCI/CDãã€ãã©ã€ã³ã«çµ±åããŠãã³ãŒãã倿Žããããã³ã«ãã¹ããèªåçã«å®è¡ããŸããã³ãŒãã«ãã¬ããžããŒã«ã¯ãååã«ãã¹ããããŠããªãã³ãŒãã®é åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã§ããäžè¬çã§ããå¯èœæ§ã®ããã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ã®åé¡ãèæ ®ããŠãè€æ°ã®ãã©ãŠã¶ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã¹ããå®è¡ãããããšã確èªããŠãã ããã
10. ã³ãŒãã¬ãã¥ãŒããã»ã¹ãææžåãã
ã¬ãã¥ãŒæ åœè ã®åœ¹å²ãšè²¬ä»»ã䜿çšãããããŒã«ãšãã¯ããã¯ãã³ãŒã倿Žã®æ¿èªãŸãã¯æåŠã®åºæºãªã©ãã³ãŒãã¬ãã¥ãŒããã»ã¹ãææžåããŸãããã®ããã¥ã¡ã³ãã¯ããã¹ãŠã®ããŒã ã¡ã³ããŒã容æã«ã¢ã¯ã»ã¹ã§ããããã«ããå¿ èŠããããŸãã
ããã¥ã¡ã³ãã«ã¯ãã³ãŒãã¬ãã¥ãŒäžã®æèŠã®çžéã察ç«ã解決ããããã®ã¬ã€ãã©ã€ã³ãå«ãŸããŠããå¿ èŠããããŸããè°è«ãéããŠè§£æ±ºã§ããªãåé¡ã«ã€ããŠã¯ãæç¢ºãªãšã¹ã«ã¬ãŒã·ã§ã³ããã»ã¹ã確ç«ããŸãã
ã³ãŒãã¬ãã¥ãŒããã»ã¹ã宿çã«èŠçŽããæŽæ°ããŠãããã广çã§é©åã§ããç¶ããããšãä¿èšŒããŸãããããžã§ã¯ããšããŒã ã®é²åããããŒãºã«åãããŠããã»ã¹ãé©å¿ãããŸããããã¯ãæ°ããããŒã«ããã¯ããã¯ãçµ¶ããåºçŸãããæ¥éã«å€åããæè¡ç°å¢ã«ãããŠç¹ã«éèŠã§ãã
JavaScriptã³ãŒãã¬ãã¥ãŒãä¿é²ããããŒã«
JavaScriptã³ãŒãã¬ãã¥ãŒããã»ã¹ãä¿é²ã§ããããã€ãã®ããŒã«ããããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- GitHub/GitLab/BitbucketïŒãããã®ãã©ãããã©ãŒã ã¯ããã«ãªã¯ãšã¹ããã³ãŒãã³ã¡ã³ããã³ãŒãã¬ãã¥ãŒã¯ãŒã¯ãããŒãªã©ã®çµã¿èŸŒã¿ã®ã³ãŒãã¬ãã¥ãŒæ©èœãæäŸããŸãã
- ESLint/JSHint/JSLintïŒãããã¯ãæœåšçãªãšã©ãŒãã³ãŒãã¹ã¿ã€ã«ã®éåãã»ãã¥ãªãã£è匱æ§ãèªåçã«æ€åºã§ããéçè§£æããŒã«ã§ãã
- PrettierïŒããã¯ãå®çŸ©ãããã³ãŒãã£ã³ã°èŠçŽã«åŸã£ãŠã³ãŒããèªåçã«ãã©ãŒãããã§ããã³ãŒããã©ãŒããã¿ãŒã§ãã
- SonarQubeïŒããã¯ãã³ãŒãå質ã®ç¶ç¶çãªæ€æ»ã®ããã®ãã©ãããã©ãŒã ã§ããã³ãŒãã®æ¬ é¥ãã»ãã¥ãªãã£è匱æ§ãã³ãŒãã®èããæ€åºã§ããŸãã
- CodeClimateïŒããã¯ãèªåã³ãŒãã¬ãã¥ãŒã®ããã®ãã©ãããã©ãŒã ã§ããã³ãŒããåæããŠæœåšçãªåé¡ãç¹å®ããéçºè ã«ãã£ãŒãããã¯ãæäŸã§ããŸãã
é©åãªããŒã«ãéžæããããšã¯ããããžã§ã¯ããšããŒã ã®ç¹å®ã®ããŒãºã«äŸåããŸããã³ãŒãããŒã¹ã®ãµã€ãºãã³ãŒãã®è€éããããŒã ã®ããŒã«ãžã®ç¿ç床ãªã©ã®èŠå ãèæ ®ããŠãã ããããŸãããããã®ããŒã«ãæ¢åã®ã¯ãŒã¯ãããŒãCI/CDãã€ãã©ã€ã³ã«ã©ã®ããã«çµ±åãããããèæ ®ããŠãã ããã
çµè«
JavaScriptã³ãŒãã¬ãã¥ãŒã¯ãé«ãã³ãŒãå質ãä¿å®æ§ãããã©ãŒãã³ã¹ã確ä¿ããããã®äžå¯æ¬ ãªå®è·µã§ããæç¢ºãªã³ãŒãã£ã³ã°èŠçŽã確ç«ããèªåããŒã«ã䜿çšãã宿çãªã³ãŒãã¬ãã¥ãŒã宿œãããªãŒãã³ãªã³ãã¥ãã±ãŒã·ã§ã³ãè²ãããšã§ãããŒã ã¯ã³ãŒãå質ãåäžãããã³ã©ãã¬ãŒã·ã§ã³ãå¹çåã§ããŸããããã¯ãæç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãšäžè²«ããã³ãŒãã£ã³ã°èŠçŽãæåã«äžå¯æ¬ ãªã°ããŒãã«ããŒã ã«ãšã£ãŠç¹ã«éèŠã§ãããã®ã¬ã€ãã§æŠèª¬ããããã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã§ãããŒã ã¯JavaScriptéçºã®å®è·µãåäžãããã°ããŒãã«ãªèŠèŽè ã®ããŒãºãæºããé«å質ã®ãœãããŠã§ã¢è£œåãæäŸã§ããŸãã
ããŒã ããã¯ãããžãŒã®é²åã«åãããŠãã³ãŒãã¬ãã¥ãŒã®ããã»ã¹ãç¶ç¶çã«é©å¿ãããããšãå¿ããªãã§ãã ãããç®æšã¯ã誰ããå¯èœãªéãæé«ã®ã³ãŒããæžãããšã«ã³ããããããç¶ç¶çæ¹åã®æåãåµé ããããšã§ãã